/**
 * 添加拦截器:
 *   拦截 request 请求
 *   拦截 uploadFile 文件上传
 *
 * TODO:
 *   1. 非 http 开头需拼接地址
 *   2. 请求超时
 *   3. 添加小程序端请求头标识
 *   4. 添加 token 请求头标识
 */

import {
	homeStore
} from "@/store/index.js"


const baseURL = 'https://pcapi-xiaotuxian-front-devtest.itheima.net'

const {
	token,
	setToken,
	remToken
} = homeStore()
/**
 * 拦截请求
 */
const httpInterceptor =  {
	invoke(options) {
		// 如果不是全部url
		if (!(options.url.startsWith('http') || options.url.startsWith('https'))) {
			options.url = baseURL + options.url
		}
		// 超时事件
		options.timeout = 10000;
		// 添加后端需要的key value
		options.header = {
			...options.header,
			'source-client': 'miniapp'
		}
		// 如果有token 携带token 传入后端
		if(token){
			options.header.Authorization = token
		}
	},
}

uni.addInterceptor('request', httpInterceptor)
uni.addInterceptor('uploadFile',httpInterceptor)

/**
 * 封装请求函数
 */
export const http = (options) => {
	return new Promise((resole,reject)=>{
		uni.request({
			// 将传入的一些属性放入请求中
			...options,
			// 成功后
			success(res){
				console.log('res',res)
				// 在200范围内 都是代表请求成功
				if(res.statusCode >= 200 && res.statusCode < 300){
					resole(res.data)
				}
				// 如果错误让他重定向去登录页面
				else if(res.statusCode == 401){
					uni.navigateTo({
						url:"/pages/login/login"
					})
					reject(res.data)
				}else{
					uni.showToast({
						icon:"none",
						title:res.data.msg || '请求错误'
					})
					reject(res)
				}
			},
			fail(err){
				uni.showToast({
					icon:'error',
					title:'网络错误，换个网络试试！'
				})
				reject(err)
			}
		})
	})
}